package models

import (
	"time"

	"gorm.io/gorm"
)

// Message 聊天消息模型
type Message struct {
	gorm.Model
	RoomID   uint      `json:"room_id" gorm:"not null"`
	UserID   int       `json:"user_id" gorm:"not null"`
	UserName string    `json:"user_name" gorm:"size:50"`
	Content  string    `json:"content" gorm:"type:text"`
	Time     time.Time `json:"time"`
}

func CreateMessage(msg *Message) error {
	return GetDB().Create(msg).Error
}

func GetMessagesByRoom(roomID uint, page int, pageSize int) ([]Message, error) {
	var msgs []Message
	offset := (page - 1) * pageSize
	err := GetDB().Where("room_id = ?", roomID).Order("created_at desc").Offset(offset).Limit(pageSize).Find(&msgs).Error
	return msgs, err
}

// SaveMessage 保存WebSocket消息到数据库
func SaveMessage(msg *Message, roomID string) error {
	// 将roomID字符串转换为uint
	var roomIDUint uint
	if roomID != "" {
		// 这里可以根据实际需求处理roomID的转换
		// 暂时使用默认值1，实际应该根据roomID查找对应的房间ID
		roomIDUint = 1
	}

	msg.RoomID = roomIDUint
	msg.Time = time.Now()

	return GetDB().Create(msg).Error
}

// SetMessageRead 标记消息为已读
func SetMessageRead(userID int, messageID string) error {
	// 这里可以实现消息已读标记功能
	// 暂时返回nil，实际应该更新数据库中的已读状态
	return nil
}
